//package com.erp.user.service.impl;
//
//import cn.hutool.core.bean.BeanUtil;
//import cn.hutool.core.collection.ListUtil;
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.erp.user.domain.ErpAgentInfo;
//import com.erp.user.domain.ErpBranchOfficeInfo;
//import com.erp.user.domain.ErpUserInfo;
//import com.erp.user.domain.bo.ErpUserInfoBo;
//import com.erp.user.domain.param.UserInfoEntity;
//import com.erp.user.domain.vo.ErpUserInfoVo;
//import com.erp.user.mapper.ErpAgentInfoMapper;
//import com.erp.user.mapper.ErpBranchOfficeInfoMapper;
//import com.erp.user.mapper.ErpUserInfoMapper;
//import com.erp.user.service.IErpAgentInfoService;
//import com.erp.user.service.IErpBranchOfficeInfoService;
//import com.erp.user.service.IErpUserInfoService;
//import com.ruoyi.common.core.domain.PageQuery;
//import com.ruoyi.common.core.domain.R;
//import com.ruoyi.common.core.utils.oldUtils.StringUtils;
//import com.ruoyi.common.core.web.oldPage.TableDataInfo;
//import com.ruoyi.common.security.utils.SecurityUtils;
//import com.ruoyi.shop.api.RemoteSellerStoreService;
//import com.ruoyi.shop.api.domain.ErpSellerStoreEmpower;
//import com.ruoyi.system.api.RemoteDeptService;
//import com.ruoyi.system.api.RemoteUserService;
//import com.ruoyi.system.api.domain.SysUser;
//import lombok.RequiredArgsConstructor;
//import org.springframework.stereotype.Service;
//
//import java.util.*;
//
///**
// * 个人开户信息Service业务层处理
// *
// * @author erp
// * @date 2023-05-09
// */
//@RequiredArgsConstructor
//@Service
//public class ErpUserInfoServiceImpl implements IErpUserInfoService {
//
//	private final ErpUserInfoMapper baseMapper;
//	private final RemoteUserService userService;
//	private final RemoteDeptService deptService;
//	private final ErpBranchOfficeInfoMapper branchMapper;
//	private final ErpAgentInfoMapper agentMapper;
//	private final IErpAgentInfoService agentInfoService;
//	private final IErpBranchOfficeInfoService branchOfficeInfoService;
//    private final RemoteSellerStoreService remoteSellerStoreService;
//
//
//    @Override
//    public R<Object> getErpAgentBranchInfo(String sellerLoginId) {
//
//        //718 展示店铺层级 公司+代理+个人ERP
//        R<Object> sellerStoreEmpowerByCnCode = remoteSellerStoreService.getSellerStoreEmpowerByCnCode(sellerLoginId);
//        if (sellerStoreEmpowerByCnCode.getCode() != 200) {
//            return R.fail("店铺被删除");
//        }
//        ErpSellerStoreEmpower empower = JSONObject.parseObject(JSON.toJSONString(sellerStoreEmpowerByCnCode.getData()), ErpSellerStoreEmpower.class);
//        ErpUserInfo userInfo = new ErpUserInfo();
//        ErpAgentInfo agent = new ErpAgentInfo();
//        ErpBranchOfficeInfo branch = new ErpBranchOfficeInfo();
//        List<Map<String, Object>> list = new ArrayList<>();
//        userInfo = baseMapper.selectOne(
//                new LambdaQueryWrapper<ErpUserInfo>().eq(ErpUserInfo::getUserId, empower.getUserId())
//        );
//        R<Object> objectR = userService.selectUserById(empower.getUserId());
//        if (objectR.getCode() != 200 || objectR.getData() == null) {
//            return R.fail(objectR.getMsg());
//        }
//        SysUser sysUser = JSONObject.parseObject(JSONObject.toJSONString(objectR.getData()), SysUser.class);
//        Map<String, Object> infoMap = new HashMap<>();
//        if (userInfo == null) {
//            infoMap.put("userInfo", sysUser.getUserName());
//            infoMap.put("agent", "暂无分销信息");
//            infoMap.put("branch", "暂无分销信息");
//        }
//        else {
//            branch = branchMapper.selectById(userInfo.getBranchId());
//            agent = agentMapper.selectById(userInfo.getAgentId());
//            if (agent != null) {
//                infoMap.put("agent", agent.getCorporateName());
//            }
//            else {
//                infoMap.put("agent", null);
//            }
//            if (branch != null) {
//                infoMap.put("branch", branch.getCorporateName());
//            }
//            else {
//                infoMap.put("branch", null);
//            }
//
//            if (userInfo != null) {
//                infoMap.put("userInfo", sysUser.getUserName() + " | " + userInfo.getCode() + " | " + userInfo.getRealName());
//            }
//            else {
//                infoMap.put("userInfo", null);
//            }
//        }
//                list.add(infoMap);
//        return R.ok(list);
//    }
//
//	/**
//	 * 查询个人开户信息
//	 */
//	@Override
//	public ErpUserInfoVo queryById(Long id) {
//		ErpUserInfoVo userInfoVo = baseMapper.selectVoById(id);
//		Long userId = userInfoVo.getUserId();
//		R<Object> objectR = userService.selectUserById(userId);
//        String data = JSONObject.toJSONString(objectR.getData());
//        SysUser sysUser = JSONObject.parseObject(data, SysUser.class);
//		userInfoVo.setUserName(sysUser.getUserName());
//		userInfoVo.setEmail(sysUser.getEmail());
//		userInfoVo.setPhonenumber(sysUser.getPhonenumber());
////		String parentId = userInfoVo.getParentId();
//		return userInfoVo;
//	}
//
//	/**
//	 * 查询个人开户信息列表
//	 */
//	@Override
//	public TableDataInfo<ErpUserInfoVo> queryPageList(ErpUserInfoBo bo, PageQuery pageQuery) {
//		LambdaQueryWrapper<ErpUserInfo> lqw = buildQueryWrapper(bo);
////		Page<ErpUserInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
//
//		Page<ErpUserInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
//		List<ErpUserInfoVo> records = result.getRecords();
//		for (ErpUserInfoVo vo : records) {
//			{
//				// 获取用户信息
//				Long userId = vo.getUserId();
//				R<Object> objectR = userService.selectUserById(userId);
//                String data = JSONObject.toJSONString(objectR.getData());
//                SysUser sysUser = JSONObject.parseObject(data, SysUser.class);
//                vo.setEmail(sysUser.getEmail());
//				vo.setPhonenumber(sysUser.getPhonenumber());
//				vo.setUserName(sysUser.getUserName());
//				// 获取直推名
//				String parentId = vo.getParentId();
//				if (parentId != null) {
//					Long userInfoId = Long.parseLong(parentId);
//					ErpUserInfo userInfo = baseMapper.selectById(userInfoId);
//					if (userInfo != null) {
//						String realName = userInfo.getRealName();
//						vo.setParentId(realName);
//					}else {
//						vo.setParentId(null);
//					}
//				}
//				// 获取代理名
//				String agentIds = vo.getAgentId();
//				if (agentIds != null) {
//					Long agentId = Long.parseLong(agentIds);
//					ErpAgentInfo agentInfo = agentMapper.selectById(agentId);
//					if (agentInfo != null) {
//						String corporateName = agentInfo.getCorporateName();
//						vo.setAgentId(corporateName);
//					}else {
//						vo.setAgentId(null);
//					}
//				}
//				// 获取分公司名
//				String branchIds = vo.getBranchId();
//				if (branchIds != null) {
//					Long branchId = Long.parseLong(branchIds);
//					ErpBranchOfficeInfo branchOfficeInfo = branchMapper.selectById(branchId);
//					if (branchOfficeInfo != null) {
//						String corporateName = branchOfficeInfo.getCorporateName();
//						vo.setBranchId(corporateName);
//					}else {
//						vo.setBranchId(null);
//					}
//				}
//			}
//		}
//		return TableDataInfo.build(result);
//	}
//
//	/**
//	 * 查询个人开户信息列表
//	 */
//	@Override
//	public List<ErpUserInfoVo> queryList(ErpUserInfoBo bo) {
//		LambdaQueryWrapper<ErpUserInfo> lqw = buildQueryWrapper(bo);
//		return baseMapper.selectVoList(lqw);
//	}
//
//	private LambdaQueryWrapper<ErpUserInfo> buildQueryWrapper(ErpUserInfoBo bo) {
//		Map<String, Object> params = bo.getParams();
//		LambdaQueryWrapper<ErpUserInfo> lqw = Wrappers.lambdaQuery();
//        Long loginUserId = SecurityUtils.getUserId();
//        if (loginUserId != 1L) {
//            List<Long> list = deptService.selectDeptIdsByDeptId(loginUserId);
//            lqw.in(ErpUserInfo::getDeptId,list);
//        }
//		lqw.eq(bo.getUserId() != null, ErpUserInfo::getUserId, bo.getUserId());
//		lqw.eq(StringUtils.isNotBlank(bo.getCode()), ErpUserInfo::getCode, bo.getCode());
//		lqw.like(StringUtils.isNotBlank(bo.getRealName()), ErpUserInfo::getRealName, bo.getRealName());
//		lqw.eq(StringUtils.isNotBlank(bo.getAgentIdCard()), ErpUserInfo::getAgentIdCard, bo.getAgentIdCard());
////        lqw.like(StringUtils.isNotBlank(bo.getBranchName()), ErpUserInfo::getBranchName, bo.getBranchName());
////        lqw.like(StringUtils.isNotBlank(bo.getAgentName()), ErpUserInfo::getAgentName, bo.getAgentName());
//		lqw.eq(StringUtils.isNotBlank(bo.getContract()), ErpUserInfo::getContract, bo.getContract());
//		lqw.eq(StringUtils.isNotBlank(bo.getCertificate()), ErpUserInfo::getCertificate, bo.getCertificate());
//		lqw.eq(StringUtils.isNotBlank(bo.getParentId()), ErpUserInfo::getParentId, bo.getParentId());
//		lqw.eq(StringUtils.isNotBlank(bo.getParentIds()), ErpUserInfo::getParentIds, bo.getParentIds());
//		lqw.eq(bo.getBranchId() != null, ErpUserInfo::getBranchId, bo.getBranchId());
//		lqw.eq(StringUtils.isNotBlank(bo.getAgentId()), ErpUserInfo::getAgentId, bo.getAgentId());
//		lqw.eq(StringUtils.isNotBlank(bo.getRevision()), ErpUserInfo::getRevision, bo.getRevision());
//		return lqw;
//	}
//
//	/**
//	 * 新增个人开户信息
//	 */
//	@Override
//	public Boolean insertByBo(ErpUserInfoBo bo) {
//		ErpUserInfo add = BeanUtil.toBean(bo, ErpUserInfo.class);
//		validEntityBeforeSave(add);
//		boolean flag = baseMapper.insert(add) > 0;
//		if (flag) {
//			bo.setId(add.getId());
//		}
//		return flag;
//	}
//
//	/**
//	 * 修改个人开户信息
//	 */
//	@Override
//	public Boolean updateByBo(ErpUserInfoBo bo) {
//		ErpUserInfo update = BeanUtil.toBean(bo, ErpUserInfo.class);
//		validEntityBeforeSave(update);
//		return baseMapper.updateById(update) > 0;
//	}
//
//	/**
//	 * 保存前的数据校验
//	 */
//	private void validEntityBeforeSave(ErpUserInfo entity) {
//		// TODO 做一些数据校验,如唯一约束
//	}
//
//	/**
//	 * 批量删除个人开户信息
//	 */
//	@Override
//	public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
//		if (isValid) {
//			// TODO 做一些业务上的校验,判断是否需要校验
//		}
//		return baseMapper.deleteBatchIds(ids) > 0;
//	}
//
//	@Override
//	public ErpUserInfo selectByCode(String code) {
//		return baseMapper.selectOne(new LambdaQueryWrapper<ErpUserInfo>().eq(ErpUserInfo::getCode, code));
//	}
//
//	@Override
//	public ErpUserInfo selectById(Long id) {
//		return baseMapper.selectById(id);
//	}
//
//    @Override
//    public R<String> getUserExpirationTime(Long userId) {
//        ErpUserInfo erpUserInfo = baseMapper.selectOne(
//                new LambdaQueryWrapper<ErpUserInfo>()
//                        .eq(ErpUserInfo::getUserId, userId)
//        );
//        if (erpUserInfo != null) {
//            Long expirationTime = erpUserInfo.getExpirationTime();
//            //获取当前时间时间戳
//            Long nowTime =  new Date().getTime();
//            if (nowTime - expirationTime > 0){
//                //已过期
//                return R.ok("有效期过期",null);
//            }else {
//                //未过期
//                return R.ok("已获得有效期",expirationTime.toString());
//            }
//        } else {
//            return R.ok("暂无有效期",null);
//        }
//    }
//
//    @Override
//    public R<Object> createUserInfo(ErpUserInfoBo info) {
//
//		Long userId = info.getUserId();
//        R<Object> objectR = userService.selectUserById(userId);
//        String data = JSONObject.toJSONString(objectR.getData());
//        SysUser user = JSONObject.parseObject(data, SysUser.class);
//		// 根据邀请码获取上级关系
//		String parentCode = info.getParentCode();
//		if (StringUtils.isNotEmpty(parentCode)) {
//			// 判断邀请码是哪个层级
//			ErpBranchOfficeInfo officeInfo = branchOfficeInfoService.selectByCode(parentCode);
//			if (officeInfo == null) {
//				ErpAgentInfo agentInfo = agentInfoService.selectByCode(parentCode);
//				if (agentInfo == null) {
//					ErpUserInfo userInfo = selectByCode(parentCode);
//					if (userInfo != null) {
//						// 是个人直推,获取上级的所属分公司,代理
//						Long pushId = userInfo.getId();
//						String agentId = userInfo.getAgentId();
//						String branchId = userInfo.getBranchId();
//						String parentIds = userInfo.getParentId();
//						Long deptId = userInfo.getDeptId();
//						if (StringUtils.isNotEmpty(parentIds)) {
//							parentIds = parentIds + "," + pushId;
//						}else {
//							parentIds = pushId.toString();
//						}
//						info.setParentId(pushId.toString());
//						info.setBranchId(branchId);
//						info.setAgentId(agentId);
//						info.setParentIds(parentIds);
//						info.setDeptId(deptId);
//						user.setDeptId(deptId);
//					}
//				}else {
//					// 代理
//					Long agentInfoId = agentInfo.getId();
//					String branchId = agentInfo.getBranchId();
//					info.setBranchId(branchId);
//					info.setAgentId(agentInfoId.toString());
//					Long deptId = agentInfo.getDeptId();
//					user.setDeptId(deptId);
//					info.setDeptId(deptId);
//				}
//			}else {
//				// 分公司
//				Long officeInfoId = officeInfo.getId();// 当前用户的直推Id
//				Long deptId = officeInfo.getDeptId(); // 分公司的部门
//				user.setDeptId(deptId);
//				info.setBranchId(officeInfoId.toString());
//				info.setDeptId(deptId);
//			}
//		}else {
//			// 没填邀请码加入总公司
//			user.setDeptId(101L);
//			info.setDeptId(101L);
//		}
//		// 给用户分配角色
//		List<Long> roleIds = ListUtil.toList(user.getRoleIds());
//		roleIds.add(1646798801178693634L);
//		user.setRoleIds(roleIds.toArray(new Long[roleIds.size()]));
//		userService.updateUser(user);
//		// 判断使用时间
//		long expirationTime = 0L;
//		Integer expirationType = info.getExpirationType();
//		long nowTime = new Date().getTime();
//		if (expirationType == 0) { // 30天
//			expirationTime = 2592000000L + nowTime;
//		}else if (expirationType == 1) { // 90天
//			expirationTime = 7776000000L + nowTime;
//		}else if (expirationType == 2) { // 一年
//			Calendar ca = Calendar.getInstance();//得到一个Calendar的实例
//			ca.setTime(new Date());   //设置时间为当前时间
//			ca.add(Calendar.YEAR, +1); //年份+1
//			expirationTime = ca.getTime().getTime();
//		}
//		info.setExpirationTime(expirationTime);
//		// 获取8位纯数字
//		Long random = new Random().nextLong();
//		String code = random.toString().substring(3, 11);
//		info.setCode(code);
//		if (baseMapper.insert(BeanUtil.toBean(info,ErpUserInfo.class)) < 0) {
//			return R.fail();
//		}
//        return R.ok(info);
//    }
//
//	@Override
//	public Boolean getUserIsPay(Long userId) {
//		ErpUserInfo userInfo= baseMapper.selectOne(new LambdaQueryWrapper<ErpUserInfo>()
//				.eq(ErpUserInfo::getUserId, userId));
//		if (userInfo == null) {
//			return false;
//		}else {
//			Integer isPay = userInfo.getIsPay();
//			return isPay == 1;
//		}
//	}
//
//    @Override
//    public Map<String, Object> getSellerList() {
//        Map<String, Object> map = new HashMap<>();
//        // 个人开户信息查询
//        List<ErpUserInfo> userInfoList = baseMapper
//                .selectList(new LambdaQueryWrapper<ErpUserInfo>().eq(ErpUserInfo::getDelFlag, 0));
//        List<UserInfoEntity> list1 = new ArrayList<>();
//        userInfoList.forEach(userInfo -> {
//            R<Object> objectR = userService.selectUserById(userInfo.getUserId());
//            System.out.println(objectR.getData() + objectR.getMsg());
//            String toJSONString = JSONObject.toJSONString(objectR.getData());
//            SysUser sysUser = JSONObject.parseObject(toJSONString,SysUser.class);
//            list1.add(new UserInfoEntity(userInfo.getUserId(), sysUser.getUserName() + " - " + userInfo.getCode() + " - " + userInfo.getRealName(), userInfo.getCode()));
//        });
//        map.put("个人", list1);
//        // 代理账号
//        List<ErpAgentInfo> agentInfoList = agentMapper
//                .selectList(new LambdaQueryWrapper<ErpAgentInfo>().eq(ErpAgentInfo::getDelFlag, 0));
//        List<UserInfoEntity> list2 = new ArrayList<>();
//        agentInfoList.forEach(userInfo -> {
//            R<Object> objectR = userService.selectUserById(userInfo.getUserId());
//            String toJSONString = JSONObject.toJSONString(objectR.getData());
//            SysUser sysUser = JSONObject.parseObject(toJSONString,SysUser.class);
//            list2.add(new UserInfoEntity(userInfo.getUserId(), sysUser.getUserName() + " - " + userInfo.getCode() + " - " + userInfo.getRealName(), userInfo.getCode()));
//        });
//        map.put("代理", list2);
//        // 分公司账号
//        List<ErpBranchOfficeInfo> branchOfficeInfoList = branchMapper
//                .selectList(new LambdaQueryWrapper<ErpBranchOfficeInfo>().eq(ErpBranchOfficeInfo::getDelFlag, 0));
//        List<UserInfoEntity> list3 = new ArrayList<>();
//        branchOfficeInfoList.forEach(userInfo -> {
//            R<Object> objectR = userService.selectUserById(userInfo.getUserId());
//            String toJSONString = JSONObject.toJSONString(objectR.getData());
//            SysUser sysUser = JSONObject.parseObject(toJSONString,SysUser.class);
//            list3.add(new UserInfoEntity(userInfo.getUserId(), sysUser.getUserName() + " - " + userInfo.getCode() + " - " + userInfo.getCorporateName(), userInfo.getCode()));
//        });
//        map.put("分公司", list3);
//        //运营账号 --根据运营角色账号查询运营用户列表 运营角色账号id:1656897721156665345L
//        List<Long> longList=userService.selectUserIdsByRoleId(1656897721156665345L);
//        List<UserInfoEntity> list4 = new ArrayList<>();
//        if(longList.size()>0){
//            for(Long ls:longList){
//                R<Object> objectR = userService.selectUserById(ls);
//                String toJSONString = JSONObject.toJSONString(objectR.getData());
//                SysUser sysUser = JSONObject.parseObject(toJSONString,SysUser.class);
//                if(sysUser!=null){
//                    list4.add(new UserInfoEntity(ls, sysUser.getUserName() + " - " + sysUser.getNickName(),""));
//                }
//            }
//        }
//        map.put("运营", list4);
//
//        //自动化店铺账号 --根据自动化颠婆账号查询运营用户列表 运营角色账号id:1656897721156665345L
//        List<Long> longList1=userService.selectUserIdsByRoleId(1744893231733686273L);
//        List<UserInfoEntity> list5 = new ArrayList<>();
//        if(longList.size()>0){
//            for(Long ls:longList1){
//                R<Object> objectR = userService.selectUserById(ls);
//                String toJSONString = JSONObject.toJSONString(objectR.getData());
//                SysUser sysUser = JSONObject.parseObject(toJSONString,SysUser.class);
//                if(sysUser!=null){
//                    list5.add(new UserInfoEntity(ls, sysUser.getUserName() + " - " + sysUser.getNickName(),""));
//                }
//            }
//        }
//        map.put("自动化账号", list5);
//        return map;
//    }
//}
